package dletc.IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Copy03 {

	public static void main(String[] args) {
		// 文件目录复制
		
		//拷贝源
		File srcFile = new File("D:\\中软学习\\资料");
		
		//拷贝目标
		File endFile = new File("E:\\");
		
		//copy方法
		copyAll(srcFile,endFile);
		
		
	}

	public static void copyAll(File srcFile, File endFile) {
		
			//判断拷贝源 是文件还是文件目录
			if(srcFile.isFile()){
				//是文件的话 直接进行拷贝
				FileInputStream fis = null;
				FileOutputStream fos = null;
				
				try {
					
					//读这个文件
					fis = new FileInputStream(srcFile);
					//写到这个文件中。
					String path = (endFile.getAbsolutePath().endsWith("\\")?
							endFile.getAbsolutePath() : endFile.getAbsolutePath() + "\\")
							+ srcFile.getAbsolutePath().substring(3);
							
					fos = new FileOutputStream(path);
					
					//边读边写
					byte[] by = new byte[1024*1024];
					int len = 0;
					while((len = fis.read(by)) != -1){
						fos.write(by);
					}
					
					fos.flush();
					
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					if(fos != null){
						try {
							fos.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
					
					if(fis != null){
						try {
							fis.close();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}
				
				return;
			}
			
			//不是文件  就是文件目录 将所有子目录及文件 封装到File[]数组中，进行递归。
			File[] listFiles = srcFile.listFiles();
			for(File file2 : listFiles){
				
				if(file2.isDirectory()){
					//建立对应的目录
					//初始目录：D:\\中软学习\\资料 
					//目标目录：C:\\中软学习\\资料   将初始目录盘符部分拿掉，拼接到目标目录后面。
					//截取去掉盘符的部分
					String src = file2.getAbsolutePath().substring(3);
					//准备创建的目录地址  用三目运算符判断一下 是否以“\\”结尾 不是加上“\\”
					String end = endFile.getAbsolutePath().endsWith("\\")?
							endFile.getAbsolutePath() + src : endFile.getAbsolutePath() + "\\" + src;
					//创建目录。
					File newFile = new File(end);
					if(!newFile.exists()){
						newFile.mkdirs();
					}
					
				}
				//递归调用
				copyAll(file2, endFile);
			}
		}
		
	
	
	

}
